#!/bin/bash

# 获取当前机器的编号
CURRENT_MACHINE_ID=$1

# 假设这是一个包含所有32台机器GID的数组
GIDS=("::ffff:124.0.4.9" "::ffff:124.0.4.33" "::ffff:124.0.4.17" "::ffff:124.0.4.25")
DEFAULT_PORT=12360
# 定义一个数组来存储服务端进程的 PID
declare -a SERVER_PIDS

# 循环，每次将一台机器作为客户端
for (( CLIENT_ID=1; CLIENT_ID<=4; CLIENT_ID++ )); do
    # 如果当前机器是客户端
    PORT=$((DEFAULT_PORT + CLIENT_ID))
    if [ "$CURRENT_MACHINE_ID" -ne "$CLIENT_ID" ]; then

        # 定义当前服务端的日志文件名
        LOG_FILE="server_$CLIENT_ID.log"
        
        # 运行服务端，重定向输出到日志文件
        ./ibv_server -d hns_0 -g 3 -s 1024 -n 5000 -r 100 -M allmulti -p  $PORT   &
        SERVER_PID=$!
        SERVER_PIDS+=($SERVER_PID)
    fi
done

统一在一个时间点执行下面命令

TARGET_TIME="14:30"
CURRENT_TIME=$(date +%H:%M)
while [ "$CURRENT_TIME" != "$TARGET_TIME" ]; do
    sleep 1
    CURRENT_TIME=$(date +%H:%M)
done


# 构建除了当前机器外其他所有GID的字符串
GID_STRING=""
FIRST=true
for (( i=1; i<=32; i++ )); do
    if [ "$i" -ne "$CURRENT_MACHINE_ID" ]; then
        if $FIRST; then
            FIRST=false
            GID_STRING="${GIDS[$i-1]}"
        else
            GID_STRING="$GID_STRING,${GIDS[$i-1]}"
        fi
    fi
done

sleep 0.5

# 运行客户端命令，向所有其他服务器发送请求
./ibv_client -d hns_0 -g 3 -s 1024 -n 5000 -r 100 -M allmulti -p  $PORT $GID_STRING &


# 等待所有客户端完成
wait

# 杀掉所有服务端进程
for PID in ${SERVER_PIDS[@]}; do
    kill $PID
done

# 清理日志文件
rm -f server_*.log
pkill -f ibv